{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#                                           numpy 练习题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    " numpy 教程 https://www.runoob.com/numpy/numpy-array-creation.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### numpy 的array操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1.导入numpy库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import numpy.matlib as npmb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.建立一个一维数组 a 初始化为[4,5,6], (1)输出a 的类型（type）(2)输出a的各维度的大小（shape）(3)输出 a的第一个元素（值为4）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "(3,)\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "a = np.array([4,5,6])\n",
    "# 1)\n",
    "print(type(a))\n",
    "# 2)\n",
    "print(np.shape(a))\n",
    "# 3)\n",
    "print(a[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.建立一个二维数组 b,初始化为 [ [4, 5, 6],[1, 2, 3]] (1)输出各维度的大小（shape）(2)输出 b(0,0)，b(0,1),b(1,1) 这三个元素（对应值分别为4,5,2）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 3)\n",
      "4 5 2\n"
     ]
    }
   ],
   "source": [
    "b = np.array([[4,5,6],[1,2,3]])\n",
    "# 1)\n",
    "print(np.shape(b))\n",
    "# 2)\n",
    "print(b[0][0],b[0][1],b[1][1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.  (1)建立一个全0矩阵 a, 大小为 3x3; 类型为整型（提示: dtype = int）(2)建立一个全1矩阵b,大小为4x5;  (3)建立一个单位矩阵c ,大小为4x4; (4)生成一个随机数矩阵d,大小为 3x2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0. 0. 0.]\n",
      " [0. 0. 0.]\n",
      " [0. 0. 0.]]\n",
      "[[1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]]\n",
      "[[1. 0. 0. 0.]\n",
      " [0. 1. 0. 0.]\n",
      " [0. 0. 1. 0.]\n",
      " [0. 0. 0. 1.]]\n",
      "[[1. 0. 0. 0.]\n",
      " [0. 1. 0. 0.]\n",
      " [0. 0. 1. 0.]\n",
      " [0. 0. 0. 1.]]\n",
      "[[0.27678989 0.51753128]\n",
      " [0.53537196 0.62854906]\n",
      " [0.3656998  0.68642355]]\n"
     ]
    }
   ],
   "source": [
    "# 1)\n",
    "a = npmb.zeros((3,3))\n",
    "print(a)\n",
    "# 2)\n",
    "b = npmb.ones((4,5))\n",
    "print(b)\n",
    "# 3)\n",
    "c = npmb.eye(4,4)\n",
    "print(c)\n",
    "c = npmb.identity(4)\n",
    "print(c)\n",
    "# 4)\n",
    "d = npmb.rand(3,2)\n",
    "print(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. 建立一个数组 a,(值为[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] ) ,(1)打印a; (2)输出  下标为(2,3),(0,0) 这两个数组元素的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1  2  3  4]\n",
      " [ 5  6  7  8]\n",
      " [ 9 10 11 12]]\n",
      "12 1\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])\n",
    "# 1)\n",
    "print(a)\n",
    "# 2) 数组元素 a[0][0] 等价 a[0,0]\n",
    "print(a[2,3],a[0,0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6.把上一题的 a数组的 0到1行 2到3列，放到b里面去，（此处不需要从新建立a,直接调用即可）(1),输出b;(2) 输出b 的（0,0）这个元素的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3 4]\n",
      " [7 8]]\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "# 切片是 前闭后开\n",
    "b = a[0:2,2:4]\n",
    "# 1)\n",
    "print(b)\n",
    "# 2)\n",
    "print(b[0,0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " #### 7. 把第5题中数组a的最后两行所有元素放到 c中，（提示： a[1:2, :]）(1)输出 c ; (2) 输出 c 中第一行的最后一个元素（提示，使用 -1                 表示最后一个元素）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 5  6  7  8]\n",
      " [ 9 10 11 12]]\n",
      "12\n"
     ]
    }
   ],
   "source": [
    "c = a[-2:,...]\n",
    "# 1)\n",
    "print(c)\n",
    "# 2)\n",
    "print(c[-1,-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 8.建立数组a,初始化a为[[1, 2], [3, 4], [5, 6]]，输出 （0,0）（1,1）（2,0）这三个元素（提示： 使用 print(a[[0, 1, 2], [0, 1, 0]]) ）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 4 5]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2], [3, 4], [5, 6]])\n",
    "# 第一维 第二维 分别相对\n",
    "print(a[[0,1,2],[0,1,0]])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 9.建立矩阵a ,初始化为[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]，输出(0,0),(1,2),(2,0),(3,1) (提示使用 b = np.array([0, 2, 0, 1])                     print(a[np.arange(4), b]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1  6  7 11]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])\n",
    "# b ~ [0,2,0,1] 和上同理\n",
    "# np.range(x) ~ 0:x ~ np.range(0,x)\n",
    "b = np.array([0,2,0,1])\n",
    "print(a[np.arange(0,4),b])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 10.对9 中输出的那四个元素，每个都加上10，然后重新输出矩阵a.(提示： a[np.arange(4), b] += 10 ）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[11  2  3]\n",
      " [ 4  5 16]\n",
      " [17  8  9]\n",
      " [10 21 12]]\n"
     ]
    }
   ],
   "source": [
    "a[np.arange(4),b] += 10\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### array 的数学运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 11.  执行 x = np.array([1, 2])，然后输出 x 的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int32\n"
     ]
    }
   ],
   "source": [
    "x = np.array([1,2])\n",
    "print(x.dtype)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 12.执行 x = np.array([1.0, 2.0]) ，然后输出 x 的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "float64\n"
     ]
    }
   ],
   "source": [
    "x = np.array([1.0, 2.0])\n",
    "print(x.dtype)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 13.执行 x = np.array([[1, 2], [3, 4]], dtype=np.float64) ，y = np.array([[5, 6], [7, 8]], dtype=np.float64)，然后输出 x+y ,和 np.add(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 6.  8.]\n",
      " [10. 12.]]\n",
      "[[ 6.  8.]\n",
      " [10. 12.]]\n"
     ]
    }
   ],
   "source": [
    "x = np.array([[1, 2], [3, 4]], dtype=np.float64)\n",
    "y = np.array([[5, 6], [7, 8]], dtype=np.float64)\n",
    "print(x+y)\n",
    "print(np.add(x, y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 14. 利用 13题目中的x,y 输出 x-y 和 np.subtract(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-4. -4.]\n",
      " [-4. -4.]]\n",
      "[[-4. -4.]\n",
      " [-4. -4.]]\n"
     ]
    }
   ],
   "source": [
    "print(x-y)\n",
    "print(np.subtract(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 15. 利用13题目中的x，y 输出 x*y ,和 np.multiply(x, y) 还有  np.dot(x,y),比较差异。然后自己换一个不是方阵的试试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 2.]\n",
      " [3. 4.]]\n",
      "[[5. 6.]\n",
      " [7. 8.]]\n",
      "[[ 5. 12.]\n",
      " [21. 32.]]\n",
      "[[ 5. 12.]\n",
      " [21. 32.]]\n",
      "[[19. 22.]\n",
      " [43. 50.]]\n"
     ]
    }
   ],
   "source": [
    "print(x)\n",
    "print(y)\n",
    "print(x*y)\n",
    "# multiply 矩阵元素相乘 dot 矩阵点乘/内积\n",
    "print(np.multiply(x,y))\n",
    "print(np.dot(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 16. 利用13题目中的x,y,输出 x / y .(提示 ： 使用函数 np.divide())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.2        0.33333333]\n",
      " [0.42857143 0.5       ]]\n",
      "[[0.2        0.33333333]\n",
      " [0.42857143 0.5       ]]\n"
     ]
    }
   ],
   "source": [
    "print(x/y)\n",
    "print(np.divide(x, y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 17. 利用13题目中的x,输出 x的 开方。(提示： 使用函数 np.sqrt() )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.18920712 1.18920712]\n",
      " [1.18920712 1.18920712]]\n"
     ]
    }
   ],
   "source": [
    "print(np.sqrt(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 18.利用13题目中的x,y ,执行 print(x.dot(y)) 和 print(np.dot(x,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[19. 22.]\n",
      " [43. 50.]]\n",
      "[[19. 22.]\n",
      " [43. 50.]]\n"
     ]
    }
   ],
   "source": [
    "print(x.dot(y))\n",
    "print(np.dot(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 19.利用13题目中的 x,进行求和。提示：输出三种求和 (1)print(np.sum(x)):   (2)print(np.sum(x，axis =0 ));   (3)print(np.sum(x,axis = 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "21\n",
      "[5 7 9]\n",
      "[ 6 15]\n"
     ]
    }
   ],
   "source": [
    "x = np.array([[1,2,3],[4,5,6]])\n",
    "print(np.sum(x))\n",
    "# axis = 0 压缩行 axis = 1 压缩列\n",
    "print(np.sum(x,axis=0))\n",
    "print(np.sum(x,axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 20.利用13题目中的 x,进行求平均数（提示：输出三种平均数(1)print(np.mean(x)) (2)print(np.mean(x,axis = 0))(3) print(np.mean(x,axis =1))）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.5\n",
      "[2.5 3.5 4.5]\n",
      "[2. 5.]\n"
     ]
    }
   ],
   "source": [
    "x = np.array([[1,2,3],[4,5,6]])\n",
    "print(np.mean(x))\n",
    "# 同理 行平均 列平均\n",
    "print(np.mean(x,axis=0))\n",
    "print(np.mean(x,axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 21.利用13题目中的x，对x 进行矩阵转置，然后输出转置后的结果，（提示： x.T 表示对 x 的转置）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 2 3]\n",
      " [4 5 6]]\n",
      "[[1 4]\n",
      " [2 5]\n",
      " [3 6]]\n"
     ]
    }
   ],
   "source": [
    "print(x)\n",
    "print(x.T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### 22.利用13题目中的x,求e的指数（提示： 函数 np.exp()）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 2 3]\n",
      " [4 5 6]]\n",
      "[[  2.71828183   7.3890561   20.08553692]\n",
      " [ 54.59815003 148.4131591  403.42879349]]\n"
     ]
    }
   ],
   "source": [
    "# exp e的次方\n",
    "print(x)\n",
    "print(np.exp(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 23.利用13题目中的 x,求值最大的下标（提示(1)print(np.argmax(x)) ,(2) print(np.argmax(x, axis =0))(3)print(np.argmax(x),axis =1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 2 3]\n",
      " [4 5 6]]\n",
      "5\n",
      "[1 1 1]\n",
      "[2 2]\n"
     ]
    }
   ],
   "source": [
    "print(x)\n",
    "# 求值最大的下标，分别为，所有元素最大，每列相比最大所在行，每行相比最大所在列\n",
    "print(np.argmax(x))\n",
    "print(np.argmax(x,axis=0))\n",
    "print(np.argmax(x,axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 24,画图，y=x*x 其中 x = np.arange(0, 100, 0.1) （提示这里用到  matplotlib.pyplot 库）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[<matplotlib.lines.Line2D object at 0x000002A242D66DA0>]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD4CAYAAAAO9oqkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjqElEQVR4nO3deXxU9b3/8deHhCSsIWwBEjbZNxEYQMXbKqggtuJerSIqFW1d6q22Lu3v2mpva3t7a6X2Uik7Ii7ggtbqRaTXlSVhB1nCmoQlgSyEhCyTfH9/zMFGBYFsJ5l5Px+PPGbO95yZ+RwPznvO95zzPeacQ0REIlsjvwsQERH/KQxERERhICIiCgMREUFhICIiQLTfBVRV27ZtXbdu3fwuQ0SkwUhNTT3snGt3snkNNgy6detGSkqK32WIiDQYZrb3VPPUTSQiIgoDERFRGIiICAoDERFBYSAiIpxBGJjZLDPLMrNNldpam9lSM9vhPSZ47WZmU80szcw2mNnQSq+Z5C2/w8wmVWofZmYbvddMNTOr6ZUUEZFvdiZ7BnOAcV9pexRY5pzrBSzzpgGuAHp5f1OAaRAKD+AJYCQwAnjiRIB4y9xV6XVf/SwREallpw0D59yHQM5XmicAc73nc4GrK7XPcyErgFZm1hEYCyx1zuU453KBpcA4b15L59wKFxpLe16l9xIRkUpW7c5hxke7qI1bD1T1mEGic+6A9/wgkOg9TwLSKy2X4bV9U3vGSdpPysymmFmKmaVkZ2dXsXQRkYYnq6CYe19cw4KV+ygqLa/x96/2AWTvF32d3CHHOTfdORdwzgXatTvpFdUiImEnWF7BfS+upaC4jGm3DqVZbM0PHlHVMDjkdfHgPWZ57ZlA50rLJXtt39SefJJ2ERHx/P69bazancNvrx1E3w4ta+UzqhoGS4ATZwRNAt6s1H6bd1bR+UC+1530HnC5mSV4B44vB97z5h01s/O9s4huq/ReIiIR791NB5j+4S4mnt+Va4Ykn/4FVXTafQ0zWwhcDLQ1swxCZwU9DbxiZpOBvcCN3uLvAOOBNKAIuAPAOZdjZk8Bq73lnnTOnTgo/SNCZyw1Af7h/YmIRLy0rGM8/OoGBnduxS++069WP8tq46h0XQgEAk6jlopIuDpWEmTCcx+TV1TGW/dfRKdWTar9nmaW6pwLnGxegx3CWkQkXDnnePiV9ew5UsT8ySNqJAhOR8NRiIjUM3/9v128u/kgj13Rlwt7tK2Tz1QYiIjUIx/tyOa/3tvKdwd3YvJF3evscxUGIiL1RHpOEfcvXEuv9i343XWDqMuh2hQGIiL1QHFZOfe8kEp5heP5icNoGlO3h3R1AFlExGfOOR5/fSNbDhxl5qQA3do2q/MatGcgIuKz+Sv28tqaTB4c05vRfRNP/4JaoDAQEfFRyp4cnnxrC2P6tuf+0T19q0NhICLik6yjxfxwwRo6t27KH793Ho0a+XdvLx0zEBHxQWmwgh8tWENhSZAXJo8kvkljX+tRGIiI1DHnHE8s2UTK3lye+/4Q+nRo4XdJ6iYSEalr81fsZeGqdO69pAffObeT3+UACgMRkTr12c4j/OqtLVzarz0PXdbH73K+oDAQEakj6TlF/GhBKt3bNuMZnw8Yf5XCQESkDhSWBLlrXgrlFY6/3RagRZy/B4y/SgeQRURqWUWF46FX1rP9UAFz7hhBdx+uMD4d7RmIiNSyqR/s4N3NB3l8fD++1bud3+WclMJARKQWvbvpAH96fwfXDU2u0yGpz5bCQESklmw9eJSfvLKe8zq34j+vGVinQ1KfLYWBiEgtyCks5a55KbSIi2b6xGHENY7yu6RvpAPIIiI1rKy8gnsXrOHQ0RJeufsC2reM87uk09KegYhIDQoNNbGZz3Yd4elrB3Fe51Z+l3RGFAYiIjVo9id7eHHlPn54cQ+uHZrsdzlnTGEgIlJDlm/N4td/38LYAYn89PL6M9TEmVAYiIjUgG0HC7h/4Vr6dWxZ74aaOBMKAxGRajp8rIQ756ymaUwUMycNr/Ob2deEhlexiEg9UlxWzpR5KRwpDJ051CG+/p85dDIKAxGRKnLO8ejiDazZl8f/3DKUc5Nb+V1SlambSESkip77II031u3n4ct7M35QR7/LqRaFgYhIFfx9wwH+e+l2rhmSxL2X9PS7nGqrVhiY2b+b2WYz22RmC80szsy6m9lKM0szs5fNLMZbNtabTvPmd6v0Po957dvMbGw110lEpFatT8/jJ6+sY1jXBJ6+blC9HnPoTFU5DMwsCXgACDjnBgJRwE3A74BnnHM9gVxgsveSyUCu1/6Mtxxm1t973QBgHPA/Zla/B/EQkYiVmXecH8xLoV2LWJ6fOIzY6PD4uqpuN1E00MTMooGmwAFgNLDImz8XuNp7PsGbxps/xkJxOgF4yTlX4pzbDaQBI6pZl4hIjTtaXMYds1dRXFrOrNuH07Z5rN8l1Zgqh4FzLhP4A7CPUAjkA6lAnnMu6C2WASR5z5OAdO+1QW/5NpXbT/KaLzGzKWaWYmYp2dnZVS1dROSslQYr+OELqezKLuSvE4fRO7GF3yXVqOp0EyUQ+lXfHegENCPUzVNrnHPTnXMB51ygXbv6ebcgEQk/zjkee20jn6Qd4enrzmVUz7Z+l1TjqtNNdCmw2zmX7ZwrA14DRgGtvG4jgGQg03ueCXQG8ObHA0cqt5/kNSIivpu6LI3FazL48ZheXD+s4Qw+dzaqEwb7gPPNrKnX9z8G2AIsB673lpkEvOk9X+JN483/wDnnvPabvLONugO9gFXVqEtEpMYsTs3gmfe3c+3QJB68tJff5dSaKl+B7JxbaWaLgDVAEFgLTAf+DrxkZr/22mZ6L5kJzDezNCCH0BlEOOc2m9krhIIkCNzrnCuval0iIjXl07TDPLJ4Axf2aMPT154bFqeQnoqFfpw3PIFAwKWkpPhdhoiEqe2HCrhu2qd0aBnHoh9eSHyTxn6XVG1mluqcC5xsnq5AFhH5iqyjxdwxezVxjaOYfcfwsAiC01EYiIhUUlgS5M65q8kpLGXWpOEkJzT1u6Q6oTAQEfEEyyt4YOFatuw/ynPfH8Kg5Hi/S6ozGsJaRITQtQQ/f30Ty7Zm8dSEAYzpl+h3SXVKewYiIsAzS7fzcko6913Sk4kXdPO7nDqnMBCRiDd/xV6mfpDGjYFkHrq8t9/l+EJhICIR7d1NB/iPNzcxpm97fnNNeAxHXRUKAxGJWKt25/DAS+s4r3Mrnvv+UKKjIvcrMXLXXEQi2raDBfxg7mqSE5owc9JwmsSEx30JqkphICIRJzPvOJNmrSKucRTz7hxB62YxfpfkO4WBiESUvKJSJs1aRWFJkLl3joiYi8pOR9cZiEjEKC4rZ/LcFPYdKWLunSPo17Gl3yXVGwoDEYkIwfIK7ntxLWv25fLczUO5oEcbv0uqV9RNJCJhr6LC8bNFG3j/80P86qoBXHluR79LqncUBiIS1pxzPPn2Fl5bm8lDl/Xmtgi8uvhMKAxEJKw9u2wHcz7dw+SLunPf6J5+l1NvKQxEJGzN/mQ3f3p/B9cPS+bn4/tF7NXFZ0JhICJh6bU1GfzqrS2MHZDI09cOolEjBcE3URiISNhZuuUQP120gVE92/DsTUMiepiJM6X/QiISVj7deZh7X1zDwKR4np8YIK5xZA8zcaYUBiISNjZk5HHX3BS6tWnKnNuH0zxWl1KdKYWBiISFtKwCJs1aRUKzGOZPHkmCxhs6KwoDEWnw9hwu5Pt/W0l0VCMW/GAkiS3j/C6pwVEYiEiDlpFbxC0zVhKscCz4wUi6tmnmd0kNksJARBqsg/nF3DJjJQXFZcy7cwS9E1v4XVKDpaMrItIgHT5Wwi0zVnDkWCnzJ49gYFK83yU1aNozEJEGJ6+olFtnrGR/XjGzbh/OkC4JfpfU4GnPQEQalKPFZUycuYpdhwuZNWk4I7q39ruksKA9AxFpMApLgtwxezVbDx7lr7cO5aJebf0uKWxoz0BEGoTjpeVMnruadel5PHfzEEb3TfS7pLCiPQMRqfeKy8q5+4VUVu7O4Y83DuaKQbo5TU2rVhiYWSszW2RmW83sczO7wMxam9lSM9vhPSZ4y5qZTTWzNDPbYGZDK73PJG/5HWY2qborJSLho7isnB++kMqH27N5+tpBTDgvye+SwlJ19wyeBd51zvUFBgOfA48Cy5xzvYBl3jTAFUAv728KMA3AzFoDTwAjgRHAEycCREQi24kgWL4tm99eO4jvDe/id0lhq8phYGbxwLeAmQDOuVLnXB4wAZjrLTYXuNp7PgGY50JWAK3MrCMwFljqnMtxzuUCS4FxVa1LRMJDSfDLQXDzCAVBbarOnkF3IBuYbWZrzWyGmTUDEp1zB7xlDgInjvIkAemVXp/htZ2q/WvMbIqZpZhZSnZ2djVKF5H6rCRYzj3zFQR1qTphEA0MBaY554YAhfyrSwgA55wDXDU+40ucc9OdcwHnXKBdu3Y19bYiUo8oCPxRnTDIADKccyu96UWEwuGQ1/2D95jlzc8EOld6fbLXdqp2EYkwlYPgN9coCOpSlcPAOXcQSDezPl7TGGALsAQ4cUbQJOBN7/kS4DbvrKLzgXyvO+k94HIzS/AOHF/utYlIBAkdI1jzRRB8f6SCoC5V96Kz+4EFZhYD7ALuIBQwr5jZZGAvcKO37DvAeCANKPKWxTmXY2ZPAau95Z50zuVUsy4RaUBOBMEHW7MUBD6xULd+wxMIBFxKSorfZYhINVU+fVRBULvMLNU5FzjZPA1HISK+KSoNcte8FD7deUQHi32mMBARXxQUl3HnnNWk7s3ljzcO5pohyX6XFNEUBiJS5/KLyrht9io2Z+bz55uHcuW5GmvIbwoDEalTR46VMHHmKtKyjjHt1mFc1l+jj9YHCgMRqTNZR0P3LN6XU8TfJgX4dm9dPFpfKAxEpE7szzvOLTNWcuhoMXPuGMEFPdr4XZJUojAQkVqXnlPEzX9bQX5RGfMnj2BYV92qsr5RGIhIrUrLOsbEmSspKi1nwV0jOTe5ld8lyUkoDESk1mzMyGfS7FU0MuOlKefTr2NLv0uSU1AYiEit+GznEe6al0J8k8a88IORdG/bzO+S5BsoDESkxi3dcoh7X1xD19ZNmT95JB3i4/wuSU5DYSAiNWpxagY/W7yBgUnxzLl9OAnNYvwuSc6AwkBEasysj3fz5NtbuLBHG6bfFqB5rL5iGgptKRGpNuccz7y/g6nLdjB2QCLP3jSEuMZRfpclZ0FhICLVUlHhePLtLcz5dA83DEvmt9cOIjqqOjdRFD8oDESkykqDFfx00XreXLefH1zUnZ9f2Q8z87ssqQKFgYhUSUFxGfe8kMonaUf46dg+/OjiHgqCBkxhICJnLetoMbfPXs22QwX81/XnckOgs98lSTUpDETkrOzMPsakWavIKSxl5qQAF/dp73dJUgMUBiJyxlL35jJ57mqiG4WGl9A4Q+FDYSAiZ2TplkPc9+IaOsbHMffOEXRto+ElwonCQEROa8HKvfy/NzYxKCmembcPp23zWL9LkhqmMBCRU3LO8czS7Uz9II1L+rTjL7cMpWmMvjbCkbaqiJxUSbCcRxZt4I11+7kxkMxvrtHFZOFMYSAiX5NbWMrd81NZtSdH1xBECIWBiHzJruxj3DlnNfvzi/nzzUP47uBOfpckdUBhICJfWLnrCHe/kEojMxbeNVL3Ko4gCgMRAeD1tRn8bNEGOrduyuzbh+vU0QijMBCJcM45/vT+Dp5dtoMLzmnDX28dRnzTxn6XJXVMYSASwYrLynnstY28vjaT64eFzhiKidYZQ5FIYSASobKOFnP3C6ms3ZfHw5f35t5LeuqMoQhW7Z8AZhZlZmvN7G1vuruZrTSzNDN72cxivPZYbzrNm9+t0ns85rVvM7Ox1a1JRL7Zxox8rnruE7YeKGDaLUO5b3QvBUGEq4n9wR8Dn1ea/h3wjHOuJ5ALTPbaJwO5Xvsz3nKYWX/gJmAAMA74HzPT/fJEaslb6/dzw/OfEtXIWPzDC7liUEe/S5J6oFphYGbJwJXADG/agNHAIm+RucDV3vMJ3jTe/DHe8hOAl5xzJc653UAaMKI6dYnI11VUOP7w3jbuX7iWQUnxvHnfKPp3aul3WVJPVPeYwZ+AnwEtvOk2QJ5zLuhNZwBJ3vMkIB3AORc0s3xv+SRgRaX3rPyaLzGzKcAUgC5dulSzdJHIUVgS5N9fXsf/bjnE9wKdeerqgTpQLF9S5X8NZvYdIMs5l1qD9Xwj59x051zAORdo165dXX2sSIOWnlPEddM+ZdnWLH753f48fZ3OGJKvq86ewSjgKjMbD8QBLYFngVZmFu3tHSQDmd7ymUBnIMPMooF44Eil9hMqv0ZEquGznUe498U1BMsrmHvHCC7q1dbvkqSeqvLPA+fcY865ZOdcN0IHgD9wzt0CLAeu9xabBLzpPV/iTePN/8A557z2m7yzjboDvYBVVa1LREIXkk3/cCe3zlxJ62YxvHnfRQoC+Ua1cZ3BI8BLZvZrYC0w02ufCcw3szQgh1CA4JzbbGavAFuAIHCvc668FuoSiQiFJUF+tmgDf994gPGDOvD76wfTPFaXFMk3s9CP84YnEAi4lJQUv8sQqVd2ZR/j7vmp7Mw+xiPj+jLlW+fo+gH5gpmlOucCJ5unnwsiYeJ/Nx/koVfW0zi6EfMnj2RUT3ULyZlTGIg0cOUVoVtTPrc8jXOT45l26zCSWjXxuyxpYBQGIg1YXlEpD7y0jg+3Z3PT8M788qoBxDXWBfxy9hQGIg3Umn253P/iWrILSvjttYO4eYQuxJSqUxiINDDOOWZ+vJun/7GVjq3iePWeCxjcuZXfZUkDpzAQaUDyi8p4eNF6lm45xNgBifz++sHEN9GNaKT6FAYiDcS69DzuXbCGrIJi/uM7/bljVDedNio1RmEgUs8555j9yR5++4/Pad8ijlfvuZDz1C0kNUxhIFKP5R8v45FFG3h380Eu7ZfIH244l1ZNY/wuS8KQwkCknkrZk8OPX1rHoaPF/OLKfky+qLu6haTWKAxE6plgeQXPLU9j6rIdJCc05dV7LmBIlwS/y5IwpzAQqUcycot48KV1pOzN5dqhSfzqqgG0iNPZQlL7FAYi9cRb6/fz+OsbcQ6evek8Jpx30hv+idQKhYGIz46VBPnlks0sSs1gSJdWPPu9IXRp09TvsiTCKAxEfLQuPY8HX1rLvpwiHhjdk/vH9KJxlG5JKXVPYSDig9JgBc99sIO//HMniS1iWXjX+Yw8p43fZUkEUxiI1LFtBwv4ySvr2Lz/KNcNTeaJq/rTUgeJxWcKA5E6Ul7hmPnxLv7w3nZaxEXz/MRhjB3Qwe+yRACFgUid2HekiIdfXc+qPTmMHZDIf14ziLbNY/0uS+QLCgORWuScY+GqdH799y1EmfHfNwzm2qFJupJY6h2FgUgtSc8p4vHXN/LRjsNc1LMtv7/+XDrpdpRSTykMRGpYRYVj3md7+P172zDgqasHcsuILjRqpL0Bqb8UBiI1KC3rGI8s3kDq3ly+3bsdv7l2kG5OLw2CwkCkBpSVVzD9w108u2wHTRpH6diANDgKA5Fq2pSZzyOLN7B5/1GuGNiBX00YQPsWcX6XJXJWFAYiVVRUGuTZZTuY8dFuEprGMO2WoVwxqKPfZYlUicJApAqWbjnEL5dsJjPvODcGknl8fD/dgUwaNIWByFnIzDvOL5dsZumWQ/RObM6r91zA8G6t/S5LpNoUBiJnoKy8gjmf7OGZ97dT4RyPjOvL5Iu6ExOtEUYlPCgMRE4jdW8uP399I1sPFjCmb3t+edUAOrfW/QYkvFT5Z42ZdTaz5Wa2xcw2m9mPvfbWZrbUzHZ4jwleu5nZVDNLM7MNZja00ntN8pbfYWaTqr9aItWXVVDMT19dz3XTPiX/eBnPTxzGjEkBBYGEpersGQSBh5xza8ysBZBqZkuB24FlzrmnzexR4FHgEeAKoJf3NxKYBow0s9bAE0AAcN77LHHO5VajNpEqKw1WMOfT3UxdlkZJsJy7v3UO94/pRfNY7UhL+Kryv27n3AHggPe8wMw+B5KACcDF3mJzgX8SCoMJwDznnANWmFkrM+voLbvUOZcD4AXKOGBhVWsTqarl27J46q0t7DpcyOi+7fnFlf04p11zv8sSqXU18lPHzLoBQ4CVQKIXFAAHgUTveRKQXullGV7bqdpP9jlTgCkAXbp0qYnSRQDYc7iQp97ewrKtWXRv24xZtwcY3Tfx9C8UCRPVDgMzaw4sBh50zh2tfPm9c86ZmavuZ1R6v+nAdIBAIFBj7yuR62hxGX9Znsbsj/fQOMp47Iq+3DFKZwlJ5KlWGJhZY0JBsMA595rXfMjMOjrnDnjdQFleeybQudLLk722TP7VrXSi/Z/VqUvkdEqDFSxYuZepy3aQW1TGdUOTeWRcH9q31DASEpmqHAYW2gWYCXzunPtjpVlLgEnA097jm5Xa7zOzlwgdQM73AuM94DcnzjoCLgceq2pdIt/EOce7mw7yu3e3sudIERf2aMPj4/sxMCne79JEfFWdPYNRwERgo5mt89oeJxQCr5jZZGAvcKM37x1gPJAGFAF3ADjncszsKWC1t9yTJw4mi9Sk1L25/Oadz0ndm0uv9s2ZfftwLu7TTiOLigAWOrmn4QkEAi4lJcXvMqQB2JV9jD/87zbe2XiQdi1i+cllvblhWDLRUTouIJHFzFKdc4GTzdOJ0xK2MnKLmLpsB4vXZBIT1YgHL+3FXf92Ds10vYDI1+j/Cgk7WQXF/OWDNBauCp2xfNsFXfnRxT1p1yLW58pE6i+FgYSN3MJSnv9wF3M+3U1ZuePGQDL3j+6lm9CLnAGFgTR4+cfLmPPJHmZ8tItjpUEmDO7Eg5f2plvbZn6XJtJgKAykwcopLGXWx7uZ++keCkqCjB2QyE8u60OfDi38Lk2kwVEYSIOTVVDMjI9288KKvRwvK+eKgR2495KeDOikawVEqkphIA3GgfzjPP9/u1i4ah9l5RV8d3An7rukJ70StScgUl0KA6n30rKOMfPjXSxOzaTCOa4ZksSPLulJdx0TEKkxCgOpl5xzrN6Ty/QPd/L+51nERDfihkAy93y7h24uI1ILFAZSr5RXhMYOmv7RLtan55HQtDEPjOnFbRd0pW1zXScgUlsUBlIvFJYEWZSawYyPd5Gec5yubZry1NUDuX5oMk1iovwuTyTsKQzEVzuzjzH/s70sTs2goCTIkC6t+Pn4flzWvwNRjTSAnEhdURhInSuvcCzfmsXcz/bw0Y7DNI4yrhzUkYkXdGNY14TTv4GI1DiFgdSZvKJSXl6dzvwVe8nIPU5iy1geuqw3N43oonGDRHymMJBaVVHhWLH7CC+vTucfmw5SGqxgRPfWPD6+H5f1T6SxhpEWqRcUBlIrDh0tZlFqBi+vTmdfThEt46K5aXhnbh7RhX4dW/pdnoh8hcJAakxZeQXLt2bxSko6H2zNosLB+ee05ieX9WbcwA7ENdZZQSL1lcJAqsU5x5p9ebyxNpO3N+wnt6iMdi1iufvbPbgx0FlXCYs0EAoDqZJd2cd4Y91+3libyb6cImKjG3FZ/0SuPi+Jb/dpp2MBIg2MwkDOWGbecf6x8QBvbTjA+vQ8zGBUj7Y8MKYXYwck0iKusd8likgVKQzkG+07UsQ7mw7wj00HWZ+eB0D/ji35+fh+fHdwJzrEx/lboIjUCIWBfIlzjp3Zhby3+SDvbDzA5v1HARicHM8j4/pyxcAOuoOYSBhSGAilwQpW7c5h2dZDLN+axZ4jRQAM7dKKX1zZj7EDOmikUJEwpzCIUNkFJfxzWxYfbM3iox2HOVYSJCa6EaN6tGHyv53Dpf3a0zFeN5IXiRQKgwhRVBpk1e4cPkk7zMdpR/j8QKj7J7FlLN8d3IkxfdtzYc82NI3RPwmRSKT/88NUWXkFGzPz+WTHYT5OO8yafbmUlTtiohoxrGsCD1/em4v7tGdAp5aYaXRQkUinMAgTx0qCrN2Xy+o9uaTsyWHtvjyOl5UDMKBTS+4c1Z1RPdsyvFtr3R9ARL5GYdAAOefYe6SIDZn5rNmbS8reHLbsP0qFg0YG/Tq25HvDOxPolsCFPdrSulmM3yWLSD2nMKjnnHNk5B5nQ0Y+GzLz2JiRz8bMfAqKgwA0aRzFkC6tuG90L4Z3S2BIlwSax2qzisjZ0bdGPZJXVMr2Q8fYdqiA7QcL2HaogG0HC8g/XgZA4yijX8eWXDW4E4OS4hmUHE/vxBYa+kFEqk1hUMdKguVk5B5n75FC9hwuYu+RQnYdLmT7oQIOHS35YrkWsdH07tCC8YM6MDApnnOTWtG7Q3Nio9XfLyI1r96EgZmNA54FooAZzrmnfS7prDnnKCgJcjC/mAP5xRzMP+49FpORe5w9RwrZn3ecCvev17SIjaZb22Zc1LMdfTo0p3diC3ontqBjfJzO8hGROlMvwsDMooC/AJcBGcBqM1vinNviRz1l5RUUlZZTVBqksORfj8dKguQWlZJbWErOicfCMvKKSskpLOXQ0WIKS8u/9F5m0LZ5LJ1aNSHQNYGuQ5Pp1rYpXds0o1ubZiQ0bawvfRHxXb0IA2AEkOac2wVgZi8BE4AaD4Pv/PkjikrKCVY4yiscwYoK79FRXu4oCVZQWl5x2veJiWpE62YxJDSLoXWzxvTr1JKL+7SnY3wcHeLjvnhs3yKOmGj16YtI/VZfwiAJSK80nQGM/OpCZjYFmALQpUuXKn1Qz3bNCVY4ohsZ0VGNiG5kRDUy77ERjaON5jHRNI2NpllM1L8eY6JpFhtFQtMYWjeLoWlMlH7Ri0jYqC9hcEacc9OB6QCBQMCdZvGT+tNNQ2q0JhGRcFBf+i8ygc6VppO9NhERqQP1JQxWA73MrLuZxQA3AUt8rklEJGLUi24i51zQzO4D3iN0auks59xmn8sSEYkY9SIMAJxz7wDv+F2HiEgkqi/dRCIi4iOFgYiIKAxERERhICIigDlXpWu3fGdm2cDeKr68LXC4BstpCLTOkUHrHP6qs75dnXPtTjajwYZBdZhZinMu4HcddUnrHBm0zuGvttZX3UQiIqIwEBGRyA2D6X4X4AOtc2TQOoe/WlnfiDxmICIiXxapewYiIlKJwkBERCIrDMxsnJltM7M0M3vU73pqg5l1NrPlZrbFzDab2Y+99tZmttTMdniPCX7XWtPMLMrM1prZ2950dzNb6W3vl73h0cOGmbUys0VmttXMPjezC8J9O5vZv3v/rjeZ2UIziwu37Wxms8wsy8w2VWo76Xa1kKneum8ws6FV/dyICQMziwL+AlwB9AduNrP+/lZVK4LAQ865/sD5wL3eej4KLHPO9QKWedPh5sfA55Wmfwc845zrCeQCk32pqvY8C7zrnOsLDCa07mG7nc0sCXgACDjnBhIa7v4mwm87zwHGfaXtVNv1CqCX9zcFmFbVD42YMABGAGnOuV3OuVLgJWCCzzXVOOfcAefcGu95AaEviCRC6zrXW2wucLUvBdYSM0sGrgRmeNMGjAYWeYuE1TqbWTzwLWAmgHOu1DmXR5hvZ0LD7jcxs2igKXCAMNvOzrkPgZyvNJ9qu04A5rmQFUArM+tYlc+NpDBIAtIrTWd4bWHLzLoBQ4CVQKJz7oA36yCQ6FddteRPwM+ACm+6DZDnnAt60+G2vbsD2cBsr2tshpk1I4y3s3MuE/gDsI9QCOQDqYT3dj7hVNu1xr7XIikMIoqZNQcWAw86545WnudC5xOHzTnFZvYdIMs5l+p3LXUoGhgKTHPODQEK+UqXUBhu5wRCv4S7A52AZny9OyXs1dZ2jaQwyAQ6V5pO9trCjpk1JhQEC5xzr3nNh07sPnqPWX7VVwtGAVeZ2R5C3X+jCfWnt/K6EyD8tncGkOGcW+lNLyIUDuG8nS8Fdjvnsp1zZcBrhLZ9OG/nE061XWvsey2SwmA10Ms78yCG0IGnJT7XVOO8vvKZwOfOuT9WmrUEmOQ9nwS8Wde11Rbn3GPOuWTnXDdC2/UD59wtwHLgem+xcFvng0C6mfXxmsYAWwjj7Uyoe+h8M2vq/Ts/sc5hu50rOdV2XQLc5p1VdD6QX6k76ew45yLmDxgPbAd2Aj/3u55aWseLCO1CbgDWeX/jCfWhLwN2AO8Drf2utZbW/2Lgbe/5OcAqIA14FYj1u74aXtfzgBRvW78BJIT7dgZ+BWwFNgHzgdhw287AQkLHRMoI7QFOPtV2BYzQWZI7gY2EzrSq0udqOAoREYmobiIRETkFhYGIiCgMREREYSAiIigMREQEhYGIiKAwEBER4P8DDULEI8U2KTYAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as mbpplot\n",
    "# 这里将 0到 100 间距 0.1\n",
    "x = np.arange(0, 100, 0.1)\n",
    "y = x*x\n",
    "print(mbpplot.plot(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 25.画图。画正弦函数和余弦函数， x = np.arange(0, 3 * np.pi, 0.1)(提示：这里用到 np.sin() np.cos() 函数和 matplotlib.pyplot 库)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2a242f79ac8>]"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0,3*np.pi,0.1)\n",
    "mbpplot.plot(x,np.sin(x),color='black')\n",
    "mbpplot.plot(x,np.cos(x),color='red')"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
